package com.kotlin.flong.coroutines

import kotlinx.coroutines.*

/**
 * @Author:liangjl
 * @Date: 2020/7/7-17:20
 * @Eamil:jilongliang@sina.com
 * @Description:
 * 1、kotilnx.coroutines包下的所有挂起函数都是可以取消的
 * 2、它们会检查协程的取消状态，当取消时会抛出CancellationException 异常
 * 3、不过，如果协程正在处于某个计算过程当中，并没有检查取消状态，那么它就是无法被取消的
 *
 */

fun main() = runBlocking {
    var startTime = System.currentTimeMillis()

    var job = launch(Dispatchers.Default) {
        var nextPrintTime = startTime
        var i = 0
        while (i < 20) {
            //if外面执行了多次
            //println(System.currentTimeMillis())
            if (System.currentTimeMillis() >= nextPrintTime) {
                println("job :i am sleeping ${i++}")
                nextPrintTime += 500L
            }
        }
    }

    delay(1300)
    println("hello world")

    job.cancelAndJoin()

}